package com.candoit.webapps.pricing.controllers;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import com.candoit.webapps.pricing.model.ConsumoPapelMes;
import com.candoit.webapps.pricing.model.OrdenTrabajo;
import com.candoit.webapps.pricing.model.OrdenesTrabajoMesFK;
import com.candoit.webapps.pricing.util.ConsumoPapelUtil;
import com.candoit.webapps.pricing.util.QueryUtil;

@ManagedBean(name = "conspapelCtrl")
@ViewScoped
public class ConsumoPapelController extends AbstractController {
	
	private List<ConsumoPapelUtil> consumos;
	
	private Integer mesActual;

	public List<ConsumoPapelUtil> getConsumos() {
		if (consumos == null){
			this.fillConsumos();
		}
		return consumos;
	}

	public void setConsumos(List<ConsumoPapelUtil> consumos) {
		this.consumos = consumos;
	}
	
	private void fillConsumos(){
		List<ConsumoPapelMes> list = new ArrayList<ConsumoPapelMes>();
		
		list = QueryUtil.getInstance().getConsumoPapelMes();
		if (list.isEmpty()){
			List<OrdenTrabajo> otList = QueryUtil.getInstance().getOrdenesTrabajo();
			Iterator<OrdenTrabajo> it = otList.iterator();
			while (it.hasNext()){
				   OrdenTrabajo ot = (OrdenTrabajo) it.next();
				   ConsumoPapelMes consumoMes = new ConsumoPapelMes();
				   consumoMes.setKilos(0.00d);
				   consumoMes.setOrden(ot);
				   list.add(consumoMes);
			}
		}
		
		consumos = new ArrayList<ConsumoPapelUtil>();
		ConsumoPapelUtil util = new ConsumoPapelUtil();
		ConsumoPapelMes otMesPrimero = list.get(0);
		if (otMesPrimero.getOrden().getId() == OrdenTrabajo.AUTOMATICA_CODE){
			util.setOrdenTrabajoAutomatico(otMesPrimero);
		}else if (otMesPrimero.getOrden().getId() == OrdenTrabajo.ARTESANAL_CODE){
			util.setOrdenTrabajoArtesanal(otMesPrimero);
		}
		
		ConsumoPapelMes otMesSegundo = list.get(1);
		if (otMesSegundo.getOrden().getId() == OrdenTrabajo.AUTOMATICA_CODE){
			util.setOrdenTrabajoAutomatico(otMesSegundo );
		}else if (otMesSegundo.getOrden().getId() == OrdenTrabajo.ARTESANAL_CODE){
			util.setOrdenTrabajoArtesanal(otMesSegundo );
		}
		
		util.setDescripcion("Total");
		Double total = util.getOrdenTrabajoArtesanal().getKilos() + util.getOrdenTrabajoAutomatico().getKilos();
		Double artesanal = 0.00d;
		Double automatico = 0.00d;
		if (total > 0){	
			artesanal = (double) (util.getOrdenTrabajoArtesanal().getKilos() *100/ total.doubleValue());
			automatico = (double) (util.getOrdenTrabajoAutomatico().getKilos() *100/ total.doubleValue());
		}	
		util.setPorcentajeArtesanal(artesanal);
		util.setPorcentajeAutomatico(automatico);
		if (util.getOrdenTrabajoAutomatico().getMixConsumoPapel() != null){
			util.setMixConsPapelAutomatica(automatico * util.getOrdenTrabajoAutomatico().getMixConsumoPapel());
		}else{
			util.setMixConsPapelAutomatica(automatico * 0.00d);
		}
		if (util.getOrdenTrabajoAutomatico().getMixOrdenesTrabajoEmitidas() != null){
			util.setMixOTEmitidasAutomatica(automatico * util.getOrdenTrabajoAutomatico().getMixOrdenesTrabajoEmitidas());
			
		}else{
			util.setMixOTEmitidasAutomatica(automatico * 0.00d);
		}
		if (util.getOrdenTrabajoArtesanal().getMixConsumoPapel() != null){	
			util.setMixConsPapelArtesanal(artesanal * util.getOrdenTrabajoArtesanal().getMixConsumoPapel());
		}else{
			util.setMixConsPapelArtesanal(artesanal * 0.00d);
		}
		if (util.getOrdenTrabajoArtesanal().getMixOrdenesTrabajoEmitidas() != null){
			util.setMixOTEmitidasArtesanal(artesanal * util.getOrdenTrabajoArtesanal().getMixOrdenesTrabajoEmitidas());
		}else{
			util.setMixOTEmitidasArtesanal(artesanal * 0.00d);
		}
		
		
		consumos.add(util);
	}

	public Integer getMesActual() {
		return mesActual;
	}

	public void setMesActual(Integer mesActual) {
		this.mesActual = mesActual;
	}

	public void saveConsumos(){
		ConsumoPapelUtil c = consumos.get(0);
		ConsumoPapelMes consumoAutomatico = QueryUtil.getInstance().getConsumoPapelByOTMes(c.getOrdenTrabajoAutomatico().getOrden());
		if (consumoAutomatico == null){
			this.save(c.getOrdenTrabajoAutomatico());
		}else{
		    this.update(c.getOrdenTrabajoAutomatico());
		}
		
		ConsumoPapelMes consumoMes= QueryUtil.getInstance().getConsumoPapelByOTMes(c.getOrdenTrabajoArtesanal().getOrden());
		c.getOrdenTrabajoArtesanal().setMixConsumoPapel(c.getOrdenTrabajoAutomatico().getMixConsumoPapel());
		c.getOrdenTrabajoArtesanal().setMixOrdenesTrabajoEmitidas(c.getOrdenTrabajoAutomatico().getMixOrdenesTrabajoEmitidas());
		if (consumoMes == null){
			this.save(c.getOrdenTrabajoArtesanal());
		}else{
		    this.update(c.getOrdenTrabajoArtesanal());
		}
	}
	
	public void change(){
		ConsumoPapelUtil util = consumos.get(0);
		Double total = util.getOrdenTrabajoArtesanal().getKilos() + util.getOrdenTrabajoAutomatico().getKilos();
		Double artesanal = 0.00d;
		Double automatico = 0.00d;
		if (total > 0){	
			artesanal = (double) (util.getOrdenTrabajoArtesanal().getKilos() *100/ total.doubleValue());
			automatico = (double) (util.getOrdenTrabajoAutomatico().getKilos() *100/ total.doubleValue());
		}	
		util.setPorcentajeArtesanal(artesanal);
		util.setPorcentajeAutomatico(automatico);
		util.setMixConsPapelAutomatica(automatico * util.getOrdenTrabajoAutomatico().getMixConsumoPapel());
		util.setMixOTEmitidasAutomatica(automatico * util.getOrdenTrabajoAutomatico().getMixOrdenesTrabajoEmitidas());
		util.setMixConsPapelArtesanal(artesanal * util.getOrdenTrabajoArtesanal().getMixConsumoPapel());
		util.setMixOTEmitidasArtesanal(artesanal * util.getOrdenTrabajoArtesanal().getMixOrdenesTrabajoEmitidas());
		FacesContext.getCurrentInstance().renderResponse();
	}
	
	
}
